package com.func.infrastructure.persistent.dao.activity;

import cn.bugstack.middleware.db.router.annotation.DBRouter;
import com.func.infrastructure.persistent.po.activity.RaffleActivityAccount;
import org.apache.ibatis.annotations.Mapper;

/**
 * @version 1.0
 * @className IRaffleActivityAccountDao
 * @description 抽奖活动账户Dao
 * @author: func
 * @date 2025/3/6 22:38
 */


@Mapper
public interface IRaffleActivityAccountDao {
    /**
     * 添加新的用户到数据库
     * @param raffleActivityAccount 用户信息
     */
    void insert(RaffleActivityAccount raffleActivityAccount);

    /**
     * 更新用户数据, 为用户添加抽奖次数
     * @param raffleActivityAccount 用户活动账户
     * @return 受到影响的行数
     */
    int updateAccountQuota(RaffleActivityAccount raffleActivityAccount);

    /**
     * 查询用户账户总额度
     * @param activityAccountReq activityId, userId
     * @return 查到的用户总额度POJO类
     */
    @DBRouter
    RaffleActivityAccount queryActivityAccountByUserId(RaffleActivityAccount activityAccountReq);

    /**
     * 将总余额账户的剩余次数--
     * @param raffleActivityAccount 活动总余额账户
     */
    int updateActivityAccountSubtractionQuota(RaffleActivityAccount raffleActivityAccount);

    /**
     * 这个时候是新的一个月, 这个用户还没有建立月余额账户
     * 将总账户余额中镜像更新为新建的月余额账户中的剩余次数--
     * @param raffleActivityAccount 活动总账户
     */
    void updateActivityAccountMonthSubtractionImageQuota(RaffleActivityAccount raffleActivityAccount);

    /**
     * 这个时候是新的一个月, 这个用户还没有建立月余额账户
     * 将总账户余额中镜像更新为新建的月余额账户中的剩余次数--
     * @param raffleActivityAccount 活动总账户
     */
    void updateActivityAccountDaySubtractionImageQuota(RaffleActivityAccount raffleActivityAccount);
}
